<?php

namespace Service;

use \GatewayWorker\Lib\Gateway;
use think\Db as thinkDb;
use think\Cache;

/**
 * Description of Login
 *
 * @author dongasai
 */
class Login
{

    /**
     * hash登陆  快速登陆
     */
    public static function hash_login($data, $client_id)
    {
        dump($data);
        $name     = 'login-hash-uid-' . $data['uid'];
        $hash_old = \think\Cache::get($name);
        if ($hash_old && hash_equals($hash_old, $data['login-hash'])) {
            //快速登陆成功!
            return self::loginOk($data['uid'], $client_id);
        } else {
            return \Data\Redata::error('快速登陆失败!', [], 'login', 'login');
        }
    }

    /**
     * 普通登陆
     * @return type
     */
    public static function login($data, $client_id)
    {
        pr(' service login ::login  ');
        $db     = thinkDb::name('user_main');
        $reData = $db->where('username', '=', $data['username'])->find();
        dump($reData);
        if (!$reData) {
            //账户不存在
            pr('账户不存在');
            $message = \Data\Redata::error('账户不存在!', [], 'login', 'login');
            return $message;
        }
        $hash = md6($data['username'], $data['password']);

        pr($hash);
        $re1 = hash_equals($reData['username'], $data['username']);
        $re2 = hash_equals(md6($data['username'], $data['password']), $reData['password']);
        if ($re1 && $re2) {
            //效验成功
            pr('登录成功!');
            return self::loginOk($reData['uid'], $client_id);
        } else {
            //密码错误
            pr('密码错误!');
            $message = \Data\Redata::error('密码错误!', [], 'login', 'login');
        }
        return $message;
    }

    /**
     * 登陆完成的 操作
     */
    private static function loginOk($uid, $client_id)
    {
        session('uid', $uid);
        $hash_login = md6($uid . $client_id, time());
        //储存登陆hash 有效期1小时 用于一小时内快速登陆
        Cache::set('login-hash-uid-' . $uid, $hash_login, 3600);
        Gateway::bindUid($client_id, $uid);
        //登录成功 返回登录成功信息  及其 快速登录hash
        $data       = [
            'login-hash' => [
                'login-hash' => $hash_login,
                'uid'        => $uid
            ]
        ];
        pr('登录成功');
        $tag        = 'login-ok';
        \think\Hook::add($tag, '\\Service\\Hook\\Demo');
        \think\Hook::listens($tag, $data);
        return \Data\Redata::success('登录成功!!', $data, 'login', 'login');
    }

}
